/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package carrancao.repositorio;

import carrancao.conexao.HibernateUtil;
import carrancao.entidades.Endereco;
import carrancao.entidades.Fornecedor;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Lubnnia
 */
public class FornecedorRepositorio {

    public FornecedorRepositorio() {

    }

    public void cadastrarFornecedor(Fornecedor f) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       Transaction trans = session.beginTransaction();

       trans.begin();
       session.save(f);
       trans.commit();
       session.close();

    }

    public void deletarFornecedor(Fornecedor f) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       Transaction trans = session.beginTransaction();

       trans.begin();
       session.delete(f);
       trans.commit();
       session.close();

    }

    public void alterarFornecedor(Fornecedor f) {

       Session session = null;

       if(HibernateUtil.getSessionFactory().openSession().isConnected()){
            HibernateUtil.getSessionFactory().close();
       }
       session = HibernateUtil.getSessionFactory().openSession();

       Fornecedor fornecedor = this.pesquisarFornecedorPorID(f.getIdfornecedor());

       Endereco endereco = f.getEndereco();

       f.setIdfornecedor(fornecedor.getIdfornecedor());
       Transaction trans = session.beginTransaction();

       trans.begin();
       session.update(f);
       trans.commit();
       session.close();

    }

    public Fornecedor pesquisarFornecedorPorID(int id) {

      Session session = HibernateUtil.getSessionFactory().openSession();

      Fornecedor fornecedor = null;

      SQLQuery query = session.createSQLQuery("SELECT {fornecedor.*} FROM fornecedor" +
              " {fornecedor} WHERE idfornecedor = '" + id + "' ");

      query.addEntity("fornecedor", Fornecedor.class);

      if(query.list().size() > 0) {
          fornecedor = (Fornecedor) query.list().get(0);
          FornecedorRepositorio.initialize(fornecedor);
      }

      session.close();

      return fornecedor;

    }

    public List pesquisarFornecedorTodos() {

      Session session = HibernateUtil.getSessionFactory().openSession();

      List fornecedor = null;

      SQLQuery query = session.createSQLQuery("SELECT {fornecedor.*} FROM fornecedor" +
              " {fornecedor}");

      query.addEntity("fornecedor", Fornecedor.class);

      fornecedor = query.list();

      for(Object o: fornecedor){
          FornecedorRepositorio.initialize((Fornecedor) o);
      }

      session.close();

      return fornecedor;

    }

    public List pesquisarFornecedorPorNome(String nomeFornecedor) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       List lista = null;

       Fornecedor fornecedor = null;

       SQLQuery query = session.createSQLQuery("SELECT {Fornecedor.*} FROM fornecedor" +
               " {Fornecedor} WHERE nome_fantasia like '%" + nomeFornecedor + "%'");

       query.addEntity("Fornecedor", Fornecedor.class);

       lista = query.list();

       for(Object o: lista){
           FornecedorRepositorio.initialize((Fornecedor) o);
       }

       session.close();

       return lista;

    }

    private static void initialize(Fornecedor fornecedor){
         Hibernate.initialize(fornecedor);
         Hibernate.initialize(fornecedor.getEndereco());
    }

}
